// Token管理工具函数
import { useUserStore } from '@/stores/user'

// 预设的token过期时间选项（小时）
export const TOKEN_EXPIRY_OPTIONS = {
  SHORT: 1,      // 1小时 - 用于测试
  MEDIUM: 8,     // 8小时 - 工作时间
  LONG: 24,      // 24小时 - 标准
  EXTENDED: 168  // 7天 - 长期使用
} as const

// 根据"记住我"选项设置合适的token过期时间
export const getTokenExpiry = (rememberMe: boolean = false): number => {
  return rememberMe ? TOKEN_EXPIRY_OPTIONS.EXTENDED : TOKEN_EXPIRY_OPTIONS.LONG
}

// 格式化剩余时间显示
export const formatRemainingTime = (minutes: number): string => {
  if (minutes <= 0) return '已过期'
  
  if (minutes < 60) {
    return `${minutes}分钟`
  }
  
  const hours = Math.floor(minutes / 60)
  const remainingMinutes = minutes % 60
  
  if (hours < 24) {
    return remainingMinutes > 0 ? `${hours}小时${remainingMinutes}分钟` : `${hours}小时`
  }
  
  const days = Math.floor(hours / 24)
  const remainingHours = hours % 24
  
  return remainingHours > 0 ? `${days}天${remainingHours}小时` : `${days}天`
}

// 自动刷新token的组合函数
export const useTokenAutoRefresh = () => {
  const userStore = useUserStore()
  let refreshInterval: number | null = null
  
  // 开始自动检查token状态
  const startAutoRefresh = () => {
    // 每5分钟检查一次token状态
    refreshInterval = window.setInterval(() => {
      if (userStore.isTokenExpiringSoon(30)) { // 30分钟内过期
        console.log('Token即将过期，尝试自动刷新...')
        
        // 尝试刷新token
        userStore.refreshToken().catch((error) => {
          console.error('自动刷新token失败:', error)
          // 可以在这里显示通知，提醒用户重新登录
        })
      }
    }, 5 * 60 * 1000) // 5分钟
  }
  
  // 停止自动刷新
  const stopAutoRefresh = () => {
    if (refreshInterval) {
      clearInterval(refreshInterval)
      refreshInterval = null
    }
  }
  
  return {
    startAutoRefresh,
    stopAutoRefresh
  }
}

// 使用示例：
// 在登录组件中：
// const login = (token: string, user: User, rememberMe: boolean) => {
//   const expiryHours = getTokenExpiry(rememberMe)
//   userStore.login(token, user, expiryHours)
// }
